{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "082eac55",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "#导入相关库\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import h5py\n",
    "from lr_utils import load_dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d5b9f7b",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 数据导入及预处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b3ac09a",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "load_dataset() 返回的值的含义：\n",
    "\n",
    "train_set_x_orig ：保存的是训练集里面的图像数据（本训练集有209张64x64的图像）。\n",
    "train_set_y_orig ：保存的是训练集的图像对应的分类值（【0 | 1】，0表示不是猫，1表示是猫）。\n",
    "test_set_x_orig ：保存的是测试集里面的图像数据（本训练集有50张64x64的图像）。\n",
    "test_set_y_orig ： 保存的是测试集的图像对应的分类值（【0 | 1】，0表示不是猫，1表示是猫）。\n",
    "classes ： 保存的是以bytes类型保存的两个字符串数据，数据为：[b’non-cat’ b’cat’]。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "bba068b8",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d800981d",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(209, 64, 64, 3)\n",
      "(1, 209)\n",
      "(2,)\n"
     ]
    }
   ],
   "source": [
    "print(train_set_x_orig.shape)\n",
    "print(train_set_y.shape)\n",
    "print(classes.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "64d35085",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b'non-cat' b'cat'\n"
     ]
    }
   ],
   "source": [
    "print(classes[0],classes[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "dbafd3d3",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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rVGbhntZOOL2m/Z6PdKLG438IhOikZX6U8ybl0X5tWDPwpWJ11v/llbjxxoxNud7a3vc6qlq2vb/+tPbro0jwaZE5jGThJ8ZhdRNsnJHpHZzIoksdfN+6qm63O6PBryiL5zvFV73AzIbuJySquam4YxOCnrWcu1SdGcDeS50uX5Px5FIWIan2t9lvMd8LflOzzIyixzxZQ8EOoKY7IFARxCTPRDoCDZrs4+2cMdb3wYAuO3sXa7t9JnXHW33Bl4sjrq68tI3jrYvPf9Vd9z0yqWj7ZcufM21HdB5t92yc7R9atvbq8NBaz9t713x/e/vtTJRBKDa7HNac+iLLTVg95W4By0R4QPZuacGfu2A20z5yeft2L3+dLseMRKO/Tk9+lNDH43F0YacAbYrpJWXqe1KRo5BGWuVWmyOzFHa+Lw+OFJNCEFofWOkpCi8LlIhJOWIywqVvePbX8jM0Z0tBkKoyj66NPfv98zad45rwikNCbs3lSykOXy+FQKX+LIHAh1BTPZAoCPYqBp/aXeMJz//ZQDA29/mOd/3v/z1o+0XX77s2t7997//aHtr59zR9t4Z/7fq//zZH7ZtL+25tnfc1ZoN23e0JsPpb/PmRDNoXW+3DyQybkrEEAetqj4b+2ulSy+32/u7rs1IdU970jZtXXvzSdv/LeKKvP017f6bbvdjxTx5W2SSJFHvXp62av0VUc8npJIfkGmxK9F5u+TOvDwTlxTpnPvEq/+NK36sOOrswivelcqa8OtPtSaJVKn2XITizgS1cSltVdWTS2yS5CgX/OZPZCINDmbUSMavvdKahKnn3/0zp9v9F3fb56mm0T6FDt5+m3ddT5clyLQEOSO+7IFARxCTPRDoCGKyBwIdgakL4kaiaZo0Gi3sk52Rd/dw+OJ06p0Od9zRhtJycr4SPX79Qmv3K0nCm862fdxx261H26dec8Ydl6j/t775za7t3nd+99H21lYr/zvv/S53HJlg2BlIWOO4tUvthfOubX75paPtIYVUNmKzp0vtcemVF12bURafnb6tbZDxHnNNu763ISe0XvDC862Mz33tb91xr1xpXYITqXe3T2wQTz/X1g/546887457DYUrP/21C67tDWdau/T73/ptR9tf++Yld9xrT21T28vwaN+rN7+27e/L3/B9XLzUrp+c2faVi765196LZkl+k0KqXyGu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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示示例图片\n",
    "%matplotlib inline\n",
    "plt.imshow(train_set_x_orig[0])\n",
    "print(train_set_y[0][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "484d06c5",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(train_set_x_orig[2])\n",
    "print(train_set_y[0][2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8c482c84",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0\n",
      "  0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 1 1 0 1 1 1 0 0 0 0 0 0 1 0 0 1\n",
      "  0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1\n",
      "  1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0\n",
      "  1 1 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 0 1 1 0 1 0 1\n",
      "  0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0]]\n"
     ]
    }
   ],
   "source": [
    "print(train_set_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0cd3405c",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y=[1], it's a cat' picture\n"
     ]
    }
   ],
   "source": [
    "index = 2\n",
    "print(\"y=\" + str(train_set_y[:,index]) + \", it's a \" + classes[np.squeeze(train_set_y)[index]].decode(\"utf-8\") + \"' picture\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a33ac342",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(12288, 209)\n",
      "(1, 209)\n",
      "(12288, 50)\n",
      "(1, 50)\n"
     ]
    }
   ],
   "source": [
    "#将训练集的维度降低并转置。\n",
    "train_set_x_flatten  = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T\n",
    "print(train_set_x_flatten.shape)\n",
    "print(train_set_y.shape)\n",
    "\n",
    "test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).T\n",
    "print(test_set_x_flatten.shape)\n",
    "print(test_set_y.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb8ab263",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "预处理步骤是对数据集进行居中和标准化，这意味着可以减去每个示例中整个numpy数组的平均值，然后将每个示例除以整个numpy数组的标准偏差。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "6d6ba0c3",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 预处理\n",
    "train_set_x = train_set_x_flatten / 255\n",
    "test_set_x = test_set_x_flatten / 255"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcb5d7f2",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 构建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3b0bebe7",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    \"\"\"\n",
    "    参数：\n",
    "        z  - 任何大小的标量或numpy数组。\n",
    "    返回：\n",
    "        s  -  sigmoid（z）\n",
    "    \"\"\"\n",
    "    s = 1 / (1 + np.exp(-z))\n",
    "    return s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b03de463",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "0.5"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sigmoid(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "4e2626d2",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "#此函数为w创建一个维度为（dim，1）的0向量，并将b初始化为0。\n",
    "def initialize_with_zeros(dim):\n",
    "    \"\"\"\n",
    "        此函数为w创建一个维度为（dim，1）的0向量，并将b初始化为0。\n",
    "        \n",
    "        参数：\n",
    "            dim  - 我们想要的w矢量的大小（或者这种情况下的参数数量）\n",
    "        \n",
    "        返回：\n",
    "            w  - 维度为（dim，1）的初始化向量。\n",
    "            b  - 初始化的标量（对应于偏差）\n",
    "    \"\"\"\n",
    "    #Please Add Something\n",
    "    w = np.zeros(shape = (dim,1))    #创建一个维度为（dim，1）的0向量\n",
    "    b = 0    #初始化的标量\n",
    "    #使用断言来确保我要的数据是正确的\n",
    "    # 当程序运行到某个节点的时候，就断定某个变量的值必然是什么，或者是对象必然拥有某个属性等。\n",
    "    # 简单点来说的话，就是断定是什么东西就必然是什么东西，如果不是，就抛出异常。\n",
    "    assert(w.shape == (dim,1))    #w的维度是（dim，1）\n",
    "    assert(isinstance(b,float) or isinstance(b,int))    #b的类型是float或者是int\n",
    "\n",
    "    return (w , b)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "05b7045a",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 实现前向和后向传播的成本函数及其梯度。\n",
    "def propagate(w, b, X, Y):\n",
    "    \"\"\"\n",
    "    实现前向和后向传播的成本函数及其梯度。\n",
    "    参数：\n",
    "        w  - 权重，大小不等的数组（num_px * num_px * 3，1）\n",
    "        b  - 偏差，一个标量\n",
    "        X  - 矩阵类型为（num_px * num_px * 3，训练数量）\n",
    "        Y  - 真正的“标签”矢量（如果非猫则为0，如果是猫则为1），矩阵维度为(1,训练数据数量)\n",
    "\n",
    "    返回：\n",
    "        cost- 逻辑回归的负对数似然成本\n",
    "        dw  - 相对于w的损失梯度，因此与w相同的形状\n",
    "        db  - 相对于b的损失梯度，因此与b的形状相同\n",
    "    \"\"\"\n",
    "    #Please Add Something\n",
    "\n",
    "    m = X.shape[1]\n",
    "    #正向传播\n",
    "    A = sigmoid(np.dot(w.T,X)+b)    #计算激活值，请参考公式2\n",
    "    cost = (-1 / m) * np.sum(Y * np.log(A) + (1 - Y) * (np.log(1 - A)))    #计算成本，请参考公式3和4\n",
    "\n",
    "    #反向传播\n",
    "    dw = (1 / m) * np.dot(X,(A - Y).T)    #偏导\n",
    "    #np.dot:如果处理的是一维数组，则得到的是两数组的內积,如果是二维数组（矩阵）之间的运算，则得到的是矩阵积\n",
    "    db = (1 / m) * np.sum(A - Y)    #偏导\n",
    "\n",
    "    #使用断言确保我的数据是正确\n",
    "    assert(dw.shape == w.shape)\n",
    "    assert(db.dtype == float)\n",
    "    cost = np.squeeze(cost)    #squeeze 函数：从数组的形状中删除单维度条目，即把shape中为1的维度去掉\n",
    "    assert(cost.shape == ())\n",
    "\n",
    "    #创建一个字典，把dw和db保存起来\n",
    "    grads = {\"dw\":dw,\"db\":db}\n",
    "\n",
    "    return (grads , cost)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "09f996f6",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 此函数通过运行梯度下降算法来优化w和b\n",
    "def optimize(w , b , X , Y , num_iterations , learning_rate , print_cost = False):\n",
    "    \"\"\"\n",
    "    此函数通过运行梯度下降算法来优化w和b\n",
    "    参数：\n",
    "        w  - 权重，大小不等的数组（num_px * num_px * 3，1）\n",
    "        b  - 偏差，一个标量\n",
    "        X  - 维度为（num_px * num_px * 3，训练数据的数量）的数组。\n",
    "        Y  - 真正的“标签”矢量（如果非猫则为0，如果是猫则为1），矩阵维度为(1,训练数据的数量)\n",
    "        num_iterations  - 优化循环的迭代次数\n",
    "        learning_rate  - 梯度下降更新规则的学习率\n",
    "        print_cost  - 每100步打印一次损失值\n",
    "    \n",
    "    返回：\n",
    "        params  - 包含权重w和偏差b的字典\n",
    "        grads  - 包含权重和偏差相对于成本函数的梯度的字典\n",
    "        成本 - 优化期间计算的所有成本列表，将用于绘制学习曲线。\n",
    "    \n",
    "    提示：\n",
    "    我们需要写下两个步骤并遍历它们：\n",
    "        1）计算当前参数的成本和梯度，使用propagate（）。\n",
    "        2）使用w和b的梯度下降法则更新参数。\n",
    "    \"\"\"\n",
    "    #Please Add Something\n",
    "    costs = []\n",
    "    for i in range(num_iterations):\n",
    "        grads,cost = propagate(w,b,X,Y)\n",
    "        dw = grads[\"dw\"]\n",
    "        db = grads[\"db\"]\n",
    "        w = w - learning_rate * dw\n",
    "        b = b - learning_rate * db\n",
    "        #记录成本\n",
    "        if i % 100 == 0:\n",
    "            costs.append(cost)\n",
    "        #打印成本数据\n",
    "        if (print_cost) and (i % 100 == 0):\n",
    "            print(\"迭代的次数：%i,误差值：%f\" % (i,cost))\n",
    "\n",
    "    params = {\"w\":w,\"b\":b}\n",
    "    grads = {\"dw\":dw,\"db\":db}\n",
    "\n",
    "    return (params , grads , costs)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "7112cbe3",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# 使用学习逻辑回归参数logistic （w，b）预测标签是0还是1，\n",
    "def predict(w , b , X ):\n",
    "    \"\"\"\n",
    "    使用学习逻辑回归参数logistic （w，b）预测标签是0还是1，\n",
    "    \n",
    "    参数：\n",
    "        w  - 权重，大小不等的数组（num_px * num_px * 3，1）\n",
    "        b  - 偏差，一个标量\n",
    "        X  - 维度为（num_px * num_px * 3，训练数据的数量）的数据\n",
    "    \n",
    "    返回：\n",
    "        Y_prediction  - 包含X中所有图片的所有预测【0 | 1】的一个numpy数组（向量）\n",
    "    \n",
    "    \"\"\"\n",
    "    \n",
    "    m  = X.shape[1] #图片的数量\n",
    "    Y_prediction = np.zeros((1,m)) \n",
    "    w = w.reshape(X.shape[0],1)\n",
    "    \n",
    "    #计预测猫在图片中出现的概率\n",
    "    A = sigmoid(np.dot(w.T , X) + b)\n",
    "    for i in range(A.shape[1]):\n",
    "        #将概率a [0，i]转换为实际预测p [0，i]\n",
    "        Y_prediction[0,i] = 1 if A[0,i] > 0.5 else 0\n",
    "    #使用断言\n",
    "    assert(Y_prediction.shape == (1,m))\n",
    "    \n",
    "    return Y_prediction\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "5a072ac8",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "#通过调用之前实现的函数来构建逻辑回归模型\n",
    "def model(X_train , Y_train , X_test , Y_test , num_iterations = 2000 , learning_rate = 0.5 , print_cost = False):\n",
    "    \"\"\"\n",
    "    通过调用之前实现的函数来构建逻辑回归模型\n",
    "    \n",
    "    参数：\n",
    "        X_train  - numpy的数组,维度为（num_px * num_px * 3，m_train）的训练集\n",
    "        Y_train  - numpy的数组,维度为（1，m_train）（矢量）的训练标签集\n",
    "        X_test   - numpy的数组,维度为（num_px * num_px * 3，m_test）的测试集\n",
    "        Y_test   - numpy的数组,维度为（1，m_test）的（向量）的测试标签集\n",
    "        num_iterations  - 表示用于优化参数的迭代次数的超参数\n",
    "        learning_rate  - 表示optimize（）更新规则中使用的学习速率的超参数\n",
    "        print_cost  - 设置为true以每100次迭代打印成本\n",
    "    \n",
    "    返回：\n",
    "        d  - 包含有关模型信息的字典。\n",
    "    \"\"\"\n",
    "    #Please Add Something\n",
    "    w,b = initialize_with_zeros(X_train.shape[0])\n",
    "    parameters,grads,costs = optimize(w,b,X_train,Y_train,num_iterations,learning_rate,print_cost)\n",
    "\n",
    "    #从字典“参数”中检索参数w和b\n",
    "    w,b = parameters[\"w\"],parameters[\"b\"]\n",
    "\n",
    "    #预测测试/训练集的例子\n",
    "    Y_prediction_test = predict(w,b,X_test)\n",
    "    Y_prediction_train = predict(w,b,X_train)\n",
    "\n",
    "    print(\"训练集准确性：\",format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100),\"%\")    #mean()函数功能：求取均值\n",
    "    print(\"测试集准确性：\",format(100 - np.mean(np.abs(Y_prediction_test - Y_test))*100),\"%\")    #abs() 函数返回数字的绝对值\n",
    "\n",
    "    \n",
    "    d = {\n",
    "            \"costs\" : costs,\n",
    "            \"Y_prediction_test\" : Y_prediction_test,\n",
    "            \"Y_prediciton_train\" : Y_prediction_train,\n",
    "            \"w\" : w,\n",
    "            \"b\" : b,\n",
    "            \"learning_rate\" : learning_rate,\n",
    "            \"num_iterations\" : num_iterations }\n",
    "    return d\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "17e50f19",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====================测试model====================\n",
      "迭代的次数：0,误差值：0.693147\n",
      "迭代的次数：100,误差值：0.584508\n",
      "迭代的次数：200,误差值：0.466949\n",
      "迭代的次数：300,误差值：0.376007\n",
      "迭代的次数：400,误差值：0.331463\n",
      "迭代的次数：500,误差值：0.303273\n",
      "迭代的次数：600,误差值：0.279880\n",
      "迭代的次数：700,误差值：0.260042\n",
      "迭代的次数：800,误差值：0.242941\n",
      "迭代的次数：900,误差值：0.228004\n",
      "迭代的次数：1000,误差值：0.214820\n",
      "迭代的次数：1100,误差值：0.203078\n",
      "迭代的次数：1200,误差值：0.192544\n",
      "迭代的次数：1300,误差值：0.183033\n",
      "迭代的次数：1400,误差值：0.174399\n",
      "迭代的次数：1500,误差值：0.166521\n",
      "迭代的次数：1600,误差值：0.159305\n",
      "迭代的次数：1700,误差值：0.152667\n",
      "迭代的次数：1800,误差值：0.146542\n",
      "迭代的次数：1900,误差值：0.140872\n",
      "训练集准确性： 99.04306220095694 %\n",
      "测试集准确性： 70.0 %\n"
     ]
    }
   ],
   "source": [
    "#识别一张图片是否有猫\n",
    "print(\"====================测试model====================\")\n",
    "#这里加载的是真实的数据，请参见上面的代码部分。\n",
    "d = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 2000, learning_rate = 0.005, print_cost = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "9ac8242f",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制图\n",
    "costs = np.squeeze(d['costs'])\n",
    "plt.plot(costs)\n",
    "plt.ylabel('cost')\n",
    "plt.xlabel('iterations (per hundreds)')\n",
    "plt.title(\"Learning rate =\" + str(d[\"learning_rate\"]))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "17d2f6dc",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}